package com.vca.service.service;


import com.vca.common.page.CommonPage;
import com.vca.common.request.*;
import com.vca.common.response.*;
import com.vca.common.result.CommonResult;

import java.util.List;

/**
 * H5端订单操作
 */
public interface OrderService {

    /**
     * 订单列表
     * @param type 类型
     * @param pageRequest 分页
     * @return 订单集合
     */
    CommonPage<OrderDetailResponse> list(String language,Integer type, PageParamRequest pageRequest);

    /**
     * 订单详情
     * @param orderNo 订单id
     */
    StoreOrderDetailInfoResponse detailOrder(String language,String orderNo);

    /**
     * 订单状态数量
     * @return 订单状态数据量
     */
    OrderDataResponse orderData();

    /**
     * 查询退款理由
     * @return 退款理由集合
     */
    List<String> getRefundReason();

    /**
     * 订单删除
     * @param id 订单id
     * @return Boolean
     */
    Boolean delete(Integer id);

    /**
     * 创建订单商品评价
     * @param request 请求参数
     * @return Boolean
     */
    Boolean reply(StoreProductReplyAddRequest request);

    /**
     * 订单收货
     * @param orderNo 订单orderNo
     * @return Boolean
     */
    Boolean take(String orderNo);

    /**
     * 订单取消
     * @param orderNo 订单id
     * @return Boolean
     */
    Boolean cancel(String orderNo);
    /**
     * 订单取消(商品)
     * @param orderId 订单id
     * @return Boolean
     */
    Boolean productCancel(String orderId);

    /**
     * 订单退款申请
     * @param request 申请参数
     * @return Boolean
     */
    Boolean refundApply(String language,OrderRefundApplyRequest request);

    /**
     * 售后详情
     * @param orderNo
     * @return
     */
    AfterSaleInfoResponse refundInfo(String language,String orderNo);

    /**
     * 退货下单
     * @param request
     * @return
     */
    CommonResult refundAnOrder(RefundAnOrderRequest request);

    /**
     * 退货下单取消
     * @param orderNo
     * @return
     */
    CommonResult refundAnOrderCancel(String orderNo);

    CommonResult refundUpdate(RefundAnOrderRequest request);

    CommonResult refundRevocation(String orderNo);
    /**
     * 订单退款申请Task使用
     * @param applyList 退款List
     * @return Boolean
     */
//    Boolean refundApplyTask(List<OrderRefundApplyRequest> applyList);


    /**
     * 获取待评价商品信息
     * @param getProductReply 订单详情参数
     * @return 待评价
     */
    OrderProductReplyResponse getReplyProduct(GetProductReply getProductReply);

    /**
     * 获取申请订单退款信息
     * @param orderNo 订单编号
     * @return ApplyRefundOrderInfoResponse
     */
    ApplyRefundOrderInfoResponse applyRefundOrderInfo(String language,String orderNo);




    /**
     * 计算订单价格
     * @param request 计算订单价格请求对象
     * @return ComputedOrderPriceResponse
     */
    ComputedOrderPriceResponse computedOrderPrice(OrderComputedPriceRequest request);


    /**
     * 获取支付配置
     * @return PreOrderResponse
     */
    PreOrderResponse getPayConfig();

    Boolean getOrderInfoStatusIsAll(Integer RefundStatus,List<String> merOrderNos);

    Long getTime();
}
